﻿-------------------------------------------------------------------------------------------------------------
-----------------------------------------pca_caja.resumen_diarios--------------------------------------------
-------------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_caja.fn_calcular_resumen_diario(varchar,--empresa_id $1
							       varchar,--oficina_id $2
							       date --fecha $3
							       )RETURNS void AS
$$
BEGIN
	DELETE FROM pca_caja.resumen_diarios WHERE
		empresa_id = $1 AND
		oficina_id = $2 AND
		fecha = $3;

	INSERT INTO pca_caja.resumen_diarios
		SELECT
			$1,
			$2,
			$3,
			tipo_movimiento_id,
			moneda_id,
			AVG(monto)
		FROM
			pca_caja.vw_movimientos
		WHERE
			empresa_id = $1 AND
			oficina_id = $2 AND
			fecha = $3
		GROUP BY
			tipo_movimiento_id,
			moneda_id;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_get_resumen_diario(varchar,--empresa_id $1
							  varchar,--oficina_id $2
							  date --fecha $3
							  )RETURNS SETOF pca_caja.vw_resumen_diarios AS
$$
DECLARE
	_row pca_caja.vw_resumen_diarios%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_caja.vw_resumen_diarios
		WHERE
			empresa_id = $1 AND
			oficina_id = $2 AND
			fecha = $3
		ORDER BY
			tipo_movimiento_id DESC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-------------------------------------------------------------------------------------------------------------
---------------------------------------------pca_caja.diarios------------------------------------------------
-------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION pca_caja.fn_add_diario(varchar,--empresa_id $1
						  varchar,--oficina_id $2
						  date --fecha $3
						  )RETURNS void AS
$$
DECLARE
	_row pca_caja.diarios%ROWTYPE;
BEGIN
	SELECT 
		*
	INTO
		_row
	FROM
		pca_caja.diarios
	WHERE
		empresa_id = $1 AND
		oficina_id = $2 AND
		fecha = $3;

	IF NOT FOUND THEN
		INSERT INTO pca_caja.diarios
			(empresa_id,
			oficina_id,
			fecha)
		VALUES
			($1,$2,$3);
	END IF;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_get_diario(varchar,--empresa_id $1
						  varchar,--oficina_id $2
						  date --fecha $3
						  )RETURNS SETOF pca_caja.diarios AS
$$
DECLARE
	_row pca_caja.diarios%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_caja.diarios
		WHERE
			empresa_id = $1 AND
			oficina_id = $2 AND
			fecha = $3
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_cerrar_diario(varchar,--empresa_id $1
						     varchar,--oficina_id $2
						     date --fecha $3
						     )RETURNS void AS
$$
BEGIN
	UPDATE pca_caja.diarios SET
		cerrado = true,
		fecha_hora_cierre = now()
	WHERE
		empresa_id = $1 AND
		oficina_id = $2 AND
		fecha = $3;

	PERFORM pca_caja.fn_calcular_resumen_diario($1,$2,$3);
END;
$$
LANGUAGE plpgsql;